#include "contacts.h>
#include "Sequential List base.h" 

/*
    基于顺序表实现的通讯录项目
    顺序表con的arr存放数据PeoInfo结构体类型。
    con:[PeoInfo] [PeoInfo] [] [] []...
    
    通讯录里存储：
    一条联系人数据：
    姓名
    性别
    年龄
    电话
    地址

原理：顺序表可以存储整型数据，字符类型数据，自定义类型数据
*/

//定义联系人数据结构体
void ContactInit(Contact* con)  //SL
{
    //实际上要进行的是顺序表的初始化
    //顺序表的初始化已经实现好了
    SLInit(con);
}

void ContactDestroy(Contact* con)
{
    SLDestroy(con);
}

/* 
    scanf的第二个参数要用到取地址符&。
    当使用 %s 格式说明符读取字符串时，需要提供一个字符数组（即 char[]）的地址，
    而数组名本身就代表数组首元素的地址。
*/
void ContactAdd(Contact* con)
{
    //获取用户输入的内容：姓名+性别+年龄+电话+地址
    PeoInfo info;   //实例化一个联系人结构体变量，存储用户输入的信息
    printf("请输入姓名：");
    scanf("%s",info.name);
    printf("请输入性别：");
    scanf("%s",info.gender);
    printf("请输入年龄：");
    scanf("%d",&info.age);
    printf("请输入电话：");
    scanf("%s",info.tel);
    printf("请输入地址：");
    scanf("%s",info.address);

    //把info插入到顺序表中
    SLPushBack(con,info); //con是顺序表，info是要插入的联系人信息.此处的con为形参con（指针）

}

int FindByName(Contact* con,char name[])
{
    for(int i=0;i<con->size;i++)
    {
        if(0==strcmp(con->arr[i].name,name))
        {
            return i; //找到了，返回下标
        )
    }
    return -1; //没找到
}
void ContactDel(Contact* con)
{
    //确定要删除的数据存在
    //查找
    char name[NAME_MAX];
    printf("请输入要删除的联系人姓名：\n");
    scanf("%s",name);   //数组名就是数组首元素地址
    int find = FindByName(con,name);
    if(find<0)
    {
        printf("要删除的联系人不存在！\n");
    }
    else
    {
        //找到了，进行删除,删除指定位置的数据（下标）
        SLErase(con,find);
        printf("删除成功！\n");
    }
}

void ContactPrint(Contact con)
{
    //表头：姓名 性别 年龄 电话 地址
    printf("%s %s %s %s %s\n","姓名","性别","年龄","电话","地址");
    //遍历顺序表，按照格式打印每个联系人信息
    for(int i=0;i < con.size ;i++)
    {
        printf("%3s %3s %3d %3s %3s\n",
            con.arr[i].name,
            con.arr[i].gender,
            con.arr[i].age,
            con.arr[i].tel,
            con.arr[i].address);
    }
}

//修改联系人信息
void ContatactModify(Contact* con)
{
    char name[NAME_MAX];
    printf("请输入要修改的联系人姓名：\n");
    scanf("%s",name);
    int find = FindByNmae(con,name); //查找函数返回的是下标
    if(find<0)
    {
        printf("要修改的联系人不存在！\n");
    }
    //直接修改
    printf("请输入新的联系人信息：\n");
    printf("请输入姓名：");
    scanf("%s",con->arr[find].name);
    printf("请输入性别：");
    scanf("%s",con->arr[find].gender);
    printf("请输入年龄：");
    scanf("%d",&con->arr[find].age);
    printf("请输入电话：");
    scanf("%s",con->arr[find].tel);
    printf("请输入地址：");
    scanf("%s",con->arr[find].address);

    printf("修改成功！\n");

}

void ContactSearch(Contact* con)
{
    //11
    //姓名 性别 年龄 电话 地址
    //11   11   11   11   11
    char name[NAME_MAX];    //字符数组，保存要查找的联系人姓名
    printf("请输入要查找的联系人姓名：\n");
    scanf("%s",name);
    int find = FindByName(con,name);
    if(find<0)
    {
        printf("要查找的联系人数据 不存在！\n");
    }
    =//找到了，打印该联系人信息
    //表头：姓名 性别 年龄 电话 地址
    printf("%s %s %s %s %s\n","姓名","性别","年龄","电话","地址");
    //遍历顺序表，按照格式打印每个联系人信息
    for(int i=0;i < con.size ;i++)
    {
        printf("%3s %3s %3d %3s %3s\n",
            con.arr[find].name,
            con.arr[find].gender,
            con.arr[find].age,
            con.arr[find].tel,
            con.arr[find].address);
    }
}